﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using S7.Net.Types;

namespace KxApp.Utils
{
    public static class ParseStringClz
    {
        public static string StrType2 { get; set; } = "无法识别"; //二维码

        public static string StrType1 { get; set; } = "无法识别"; //一维码

        public static int StrType3 { get; set; } //二维码

        public static int StrType4 { get; set; } //二维码


        public static bool ParseString(string input2)
        {
            int lastSpaceIndex = input2.LastIndexOf(' ');
            if (lastSpaceIndex == -1)
            {
                return false; // 没有空格直接返回
            }

            var part1 = input2.Substring(0, lastSpaceIndex).Trim(); // 从开头到最后一个空格前
            var part2 = input2.Substring(lastSpaceIndex + 1).Trim(); // 从最后一个空格后到结尾


            #region 特征4

            //var str4 =Regex.Replace(part2, @"[^a-zA-Z]", "");
            var str4 = new string(part2.Where(c => char.IsLetter(c)).ToArray());
            StrType4 = StringToIntMapper.StringToInt(str4);

            #endregion

            #region 特征3
            if (part1.Contains("SG"))
            {
                StrType3 = 1;
            }
            else if (part1.Contains("SD"))
            {
                StrType3 = 2;
            }
            else if (part1.Contains("ST"))
            {
                StrType3 = 3;
            }
            else
            {
                StrType3 = 0;
            }
            #endregion

            #region 特征1
            // 8. 检查其他固定模式
            if (Regex.IsMatch(part1, @"^SGAIR"))
            {
                StrType1 = "上隔离（六角）";
            }
            else if (Regex.IsMatch(part1, @"^STAIR"))
            {
                StrType1 = "上隔离（花键）";
            }
            else if (Regex.IsMatch(part1, @"^SDAIR"))
            {
                StrType1 = "下隔离（六角）";
            }
            else if (Regex.IsMatch(part1, @"^SAIR630"))
            {
                StrType1 = "下隔离（花键）";
            }
            else
            {
                StrType1 = "无法识别";
            }
            #endregion


            #region 特征2
            // 1. 检查双顶出（至少 2 个不连续的 =）
            if (Regex.IsMatch(part2, @"=.*=")) // 匹配任意两个 =，中间可以有任意字符（不连续或连续）
            {
                // 进一步排除 =V= 的情况（因为 =V= 属于双顶出的子集，但按你的规则应优先匹配双顶出）
                if (!Regex.IsMatch(part2, @"=V=")) // 如果不是 =V=，则直接判定为双顶出
                {
                    //Console.WriteLine($"'{input}' → 双顶出（至少 2 个不连续的 =）");
                    StrType2 = "双顶出";
                    return true;
                }
            }

            // 2. 检查 =V=（特殊双顶出，但按你的规则应优先匹配双顶出，所以这里放在后面）
            if (Regex.IsMatch(part2, @"=V="))
            {
                //Console.WriteLine($"'{input}' → 双顶出（=V=）");
                StrType2 = "双顶出";
                return true;
            }

            // 3. 检查左顶出（=V 且 V 右侧无 =）
            if (Regex.IsMatch(part2, @"=V\b") && !Regex.IsMatch(part2, @"V=")) // \b 确保 V 是单词边界，且 V 右侧无 =
            {
                //Console.WriteLine($"'{input}' → 左顶出（=V 且 V 右侧无 =）");

                StrType2 = "左顶出";
                return true;
            }

            // 4. 检查右顶出（V= 且 V 左侧无 =）
            if (Regex.IsMatch(part2, @"\bV=") && !Regex.IsMatch(part2, @"=V")) // \b 确保 V 是单词边界，且 V 左侧无 =
            {
                //Console.WriteLine($"'{input}' → 右顶出（V= 且 V 左侧无 =）");
                StrType2 = "右顶出";
                return true;
            }

            // 5. 检查双侧出（同时包含<和>）
            if (part2.Contains("<") && part2.Contains(">"))
            {
                //Console.WriteLine($"'{input}' → 双侧出（包含<和>）");
                StrType2 = "双侧出";
                return true;
            }

            // 6. 检查左侧出（仅包含<）
            if (part2.Contains("<"))
            {
                //Console.WriteLine($"'{input}' → 左侧出（包含<）");

                StrType2 = "左侧出";
                return true;
            }

            // 7. 检查右侧出（仅包含>）
            if (part2.Contains(">"))
            {
                //Console.WriteLine($"'{input}' → 右侧出（包含>）");
                StrType2 = "右侧出";
                return true;
            }

            return false;
            #endregion
        }
    }
}


/*
 类别 1: C - 出现次数 1
类别 2: CC - 出现次数 1
类别 3: CCC - 出现次数 1
类别 4: CD - 出现次数 1
类别 5: CDV - 出现次数 1
类别 6: CV - 出现次数 1
类别 7: D - 出现次数 1
类别 8: DC - 出现次数 1
类别 9: DCV - 出现次数 1
类别 10: DD - 出现次数 1
类别 11: DDD - 出现次数 1
类别 12: DV - 出现次数 2
类别 13: V - 出现次数 1
类别 14: VC - 出现次数 1
类别 15: VD - 出现次数 1
类别 16: VV - 出现次数 1
类别 17: VVV - 出现次数 1

 
 */
